package br.com.gip.repository.dao;

import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import br.com.gip.constant.Status;
import br.com.gip.repository.model.Projeto;
import br.com.gip.repository.persistence.HibernateDao;
import br.com.gip.wrapper.BuscaProjeto;

@Repository
@Transactional
public class ProjetoDao extends HibernateDao<Projeto, Long> {

	private static final long serialVersionUID = 2863128676206225579L;

	@SuppressWarnings("unchecked")
	public List<Projeto> findByDadosProjeto(BuscaProjeto dadosProjeto) {
		Criteria criteria = this.getCurrentSession().createCriteria(Projeto.class, "p");		
		
		if (dadosProjeto != null) {
			if (dadosProjeto.getNome() != null) {
				criteria.add(Restrictions.like("nome", dadosProjeto.getNome(), MatchMode.ANYWHERE));
			}
			if (dadosProjeto.getStatusProjeto() != null) {
				criteria.add(Restrictions.eq("statusProjeto", dadosProjeto.getStatusProjeto()));
			}
			if (dadosProjeto.getDataInicial() != null) {
				criteria.add(Restrictions.ge("dataCriacao", dadosProjeto.getDataInicial()));
			}
			if (dadosProjeto.getDataFinal() != null) {
				criteria.add(Restrictions.le("dataCriacao", dadosProjeto.getDataFinal()));
			}
		}
		
		return (List<Projeto>) criteria.list();
	}
	
	@SuppressWarnings("unchecked")
	public List<Projeto> findByFilter(String nome, Status status) {
		Criteria criteria = this.getCurrentSession().createCriteria(Projeto.class, "a");
		
		if (!StringUtils.isBlank(nome)) {
			criteria.add(Restrictions.eq("nome", nome));	
		}
		
		if (status != null) {
			criteria.add(Restrictions.eq("statusProjeto", status));
		}
		
		
		
		return (List<Projeto>) criteria.list();
	}
	
}